home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ShareWare OnLine 2
/
ShareWare OnLine Volume 2 (CMS Software)(1993).iso
/
prog
/
fpclib36.zip
/
INCLUDE
/
FPCWIN.H
< prev
Wrap
C/C++ Source or Header
|
1993-03-25
|
19KB
|
616 lines
/*--------------------------------------------------------------------
- Copyright (C) 1988-1992
- SimpleSoft Inc.
-
- Written by..... Kevin Dahl
- Module name.... fpwin.h
- Date created... 5/5/91
- Purpose........
-
--------------------------------------------------------------------*/
#ifndef FPCWIN
#define FPCWIN
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <conio.h>
#include <malloc.h>
#include <dos.h>
#include <time.h>
#include <conio.h>
#include <fpclib.h>
/*--------------------------------------------------------------------
-
--------------------------------------------------------------------*/
typedef char CHAR; /* ch */
typedef short SHORT; /* s */
typedef long LONG; /* l */
typedef unsigned char UCHAR; /* uch */
typedef unsigned short USHORT; /* us */
typedef unsigned long ULONG; /* ul */
typedef unsigned char BYTE; /* b */
typedef unsigned char *PSZ;
typedef unsigned char *PCH;
typedef BYTE *PBYTE;
typedef CHAR *PCHAR;
typedef SHORT *PSHORT;
typedef LONG *PLONG;
typedef UCHAR *PUCHAR;
typedef USHORT *PUSHORT;
typedef ULONG *PULONG;
typedef unsigned short BOOL; /* f */
typedef BOOL *PBOOL;
typedef unsigned short SHANDLE;
typedef VOID FAR *LHANDLE;
typedef VOID FAR *MPARAM; /* msg param */
typedef LHANDLE HWND; /* hwnd */
typedef HWND *PHWND;
typedef LHANDLE HMQ; /* hmq */
typedef LHANDLE HAB; /* hab */
typedef VOID FAR *MPARAM; /* mp */
typedef MPARAM FAR *PMPARAM; /* pmp */
typedef VOID FAR *MRESULT; /* mres */
typedef MRESULT FAR *PMRESULT; /* pmres */
typedef USHORT HMODULE; /* hmod */
typedef HMODULE FAR *PHMODULE;
typedef VOID FAR *PVOID;
/*--------------------------------------------------------------------
-
--------------------------------------------------------------------*/
#define INT_TIMER 0x08
#define INT_KBD 0x09
#define INT_BIOSKBD 0x16
#define SYSQMAXEVENTS 50
#define DEFAULT_QUEUE_SIZE 10;
/*--------------------------------------------------------------------
-
--------------------------------------------------------------------*/
#define TRUE (BOOL) 1
#define FALSE (BOOL) 0
/*--------------------------------------------------------------------
- MouGetEventMask/MouSetEventMask events
--------------------------------------------------------------------*/
#define MOUSE 0x007f
#define MOUSE_MOTION 0x0001
#define MOUSE_BN1_DOWN 0x0002
#define MOUSE_BN1_UP 0x0004
#define MOUSE_BN2_DOWN 0x0008
#define MOUSE_BN2_UP 0x0010
#define MOUSE_BN3_DOWN 0x0020
#define MOUSE_BN3_UP 0x0040
#define MOUSE_BN_DOWN 0x002A
#define MOUSE_BN_UP 0x0054
/*--------------------------------------------------------------------
- Keyboard Shift Key masks.
--------------------------------------------------------------------*/
#define INSKEY 0x80
#define CAPSLOCK 0x40
#define NUMLOCK 0x20
#define SCROLLLOCK 0x10
#define ALTKEY 0x08
#define CTRLKEY 0x04
#define BSHFTKEY 0x03
#define LSHFTKEY 0x02
#define RSHFTKEY 0x01
/*--------------------------------------------------------------------
- Messages
--------------------------------------------------------------------*/
#define WM_NULL 0x0000
#define WM_CLOSE 0x0029
#define WM_QUIT 0x002a
/*--------------------------------------------------------------------
- Mouse input messages
--------------------------------------------------------------------*/
#define WM_MOUSEFIRST 0x0070
#define WM_MOUSELAST 0x0079
#define WM_BUTTONCLICKFIRST 0x0071
#define WM_BUTTONCLICKLAST 0x0079
#define WM_MOUSEMOVE 0x0070
#define WM_BUTTON1DOWN 0x0071
#define WM_BUTTON1UP 0x0072
#define WM_BUTTON1DBLCLK 0x0073
#define WM_BUTTON2DOWN 0x0074
#define WM_BUTTON2UP 0x0075
#define WM_BUTTON2DBLCLK 0x0076
#define WM_BUTTON3DOWN 0x0077
#define WM_BUTTON3UP 0x0078
#define WM_BUTTON3DBLCLK 0x0079
/*--------------------------------------------------------------------
- WM_HITTEST return codes
--------------------------------------------------------------------*/
#define HT_NORMAL 0
#define HT_TRANSPARENT (-1)
#define HT_DISCARD (-2)
#define HT_ERROR (-3)
/*--------------------------------------------------------------------
- Key/Character input messages
--------------------------------------------------------------------*/
#define WM_CHAR 0x007a
#define WM_VIOCHAR 0x007b
/*--------------------------------------------------------------------
- WM_CHAR fs field bits
--------------------------------------------------------------------*/
#define KC_CHAR 0x0001
#define KC_VIRTUALKEY 0x0002
#define KC_SCANCODE 0x0004
#define KC_SHIFT 0x0008
#define KC_CTRL 0x0010
#define KC_ALT 0x0020
#define KC_KEYUP 0x0040
#define KC_PREVDOWN 0x0080
#define KC_LONEKEY 0x0100
#define KC_DEADKEY 0x0200
#define KC_COMPOSITE 0x0400
#define KC_INVALIDCOMP 0x0800
/*--------------------------------------------------------------------
- Reserve a range of messages for help manager. This range includes
- public messages, defined below, and private ones, which need to be
- reserved here to prevent clashing with application messages
--------------------------------------------------------------------*/
#define WM_HELPBASE 0x0F00 /* Start of msgs for help manager */
#define WM_HELPTOP 0x0FFF /* End of msgs for help manager */
#define WM_USER 0x1000
/*--------------------------------------------------------------------
- Virtual key values
--------------------------------------------------------------------*/
#define VK_BUTTON1 0x01
#define VK_BUTTON2 0x02
#define VK_BUTTON3 0x03
#define VK_BREAK 0x04
#define VK_BACKSPACE 0x05
#define VK_TAB 0x06
#define VK_BACKTAB 0x07
#define VK_NEWLINE 0x08
#define VK_SHIFT 0x09
#define VK_CTRL 0x0A
#define VK_ALT 0x0B
#define VK_ALTGRAF 0x0C
#define VK_PAUSE 0x0D
#define VK_CAPSLOCK 0x0E
#define VK_ESC 0x0F
#define VK_SPACE 0x10
#define VK_PAGEUP 0x11
#define VK_PAGEDOWN 0x12
#define VK_END 0x13
#define VK_HOME 0x14
#define VK_LEFT 0x15
#define VK_UP 0x16
#define VK_RIGHT 0x17
#define VK_DOWN 0x18
#define VK_PRINTSCRN 0x19
#define VK_INSERT 0x1A
#define VK_DELETE 0x1B
#define VK_SCRLLOCK 0x1C
#define VK_NUMLOCK 0x1D
#define VK_ENTER 0x1E
#define VK_SYSRQ 0x1F
#define VK_F1 0x20
#define VK_F2 0x21
#define VK_F3 0x22
#define VK_F4 0x23
#define VK_F5 0x24
#define VK_F6 0x25
#define VK_F7 0x26
#define VK_F8 0x27
#define VK_F9 0x28
#define VK_F10 0x29
#define VK_F11 0x2A
#define VK_F12 0x2B
#define VK_F13 0x2C
#define VK_F14 0x2D
#define VK_F15 0x2E
#define VK_F16 0x2F
#define VK_F17 0x30
#define VK_F18 0x31
#define VK_F19 0x32
#define VK_F20 0x33
#define VK_F21 0x34
#define VK_F22 0x35
#define VK_F23 0x36
#define VK_F24 0x37
#define VK_MENU VK_F10
#define VK_DBCSFIRST 0x0080
#define VK_DBCSLAST 0x00ff
#define VK_USERFIRST 0x0100
#define VK_USERLAST 0x01ff
/*--------------------------------------------------------------------
- system variable access contants.
--------------------------------------------------------------------*/
#define SV_SWAPBUTTON 0
#define SV_DBLCLKTIME 1
#define SV_CXDBLCLK 2
#define SV_CYDBLCLK 3
#define SV_CXSIZEBORDER 4
#define SV_CYSIZEBORDER 5
#define SV_ALARM 6
/*--------------------------------------------------------------------
- WinPeekMsg() constants
--------------------------------------------------------------------*/
#define PM_REMOVE 0x0001
#define PM_NOREMOVE 0x0000
/*--------------------------------------------------------------------
-
--------------------------------------------------------------------*/
#define HWND_DESKTOP (HWND)1
#define HWND_OBJECT (HWND)2
#define HWND_TOP (HWND)3
#define HWND_BOTTOM (HWND)4
#define HWND_THREADCAPTURE (HWND)5
/*--------------------------------------------------------------------
- Standard Window Styles
--------------------------------------------------------------------*/
#define WS_VISIBLE 0x80000000L
#define WS_DISABLED 0x40000000L
#define WS_CLIPCHILDREN 0x20000000L
#define WS_CLIPSIBLINGS 0x10000000L
#define WS_PARENTCLIP 0x08000000L
#define WS_SAVEBITS 0x04000000L
#define WS_SYNCPAINT 0x02000000L
#define WS_MINIMIZED 0x01000000L
#define WS_MAXIMIZED 0x00800000L
/*--------------------------------------------------------------------
- Dialog manager styles
--------------------------------------------------------------------*/
#define WS_GROUP 0x00010000L
#define WS_TABSTOP 0x00020000L
#define WS_MULTISELECT 0x00040000L
/*--------------------------------------------------------------------
- Class styles
--------------------------------------------------------------------*/
#define CS_MOVENOTIFY 0x00000001L
#define CS_SIZEREDRAW 0x00000004L
#define CS_HITTEST 0x00000008L
#define CS_PUBLIC 0x00000010L
#define CS_FRAME 0x00000020L
#define CS_CLIPCHILDREN 0x20000000L
#define CS_CLIPSIBLINGS 0x10000000L
#define CS_PARENTCLIP 0x08000000L
#define CS_SAVEBITS 0x04000000L
#define CS_SYNCPAINT 0x02000000L
/*--------------------------------------------------------------------
- Standard Window Messages
--------------------------------------------------------------------*/
#define WM_CREATE 0x0001
#define WM_DESTROY 0x0002
#define WM_OTHERWINDOWDESTROYED 0x0003
#define WM_ENABLE 0x0004
#define WM_SHOW 0x0005
#define WM_MOVE 0x0006
#define WM_SIZE 0x0007
#define WM_ADJUSTWINDOWPOS 0x0008
#define WM_CALCVALIDRECTS 0x0009
#define WM_SETWINDOWPARAMS 0x000a
#define WM_QUERYWINDOWPARAMS 0x000b
#define WM_HITTEST 0x000c
#define WM_ACTIVATE 0x000d
#define WM_SETFOCUS 0x000f
#define WM_SETSELECTION 0x0010
/*--------------------------------------------------------------------
-
--------------------------------------------------------------------*/
typedef enum _WINDOW_CLASS
{
WC_FRAME,
WC_BUTTON,
WC_ENTRYFIELD,
WC_LISTBOX,
WC_MENU,
WC_SCROLLBAR,
WC_STATIC,
WC_TITLE
} CLASS;
/*--------------------------------------------------------------------
-
--------------------------------------------------------------------*/
#define EXPENTRY pascal far _loadds
#define APIENTRY pascal far
/*--------------------------------------------------------------------
-
--------------------------------------------------------------------*/
typedef struct _POINTL /* ptl */
{
SHORT x;
SHORT y;
} POINTL;
/*--------------------------------------------------------------------
- The following structure and macro are used to access the
- WM_COMMAND, WM_HELP, and WM_SYSCOMMAND message parameters:
--------------------------------------------------------------------*/
typedef struct _COMMANDMSG /* commandmsg */
{
USHORT source; /* mp2 */
BOOL fMouse;
USHORT cmd; /* mp1 */
USHORT unused;
} CMDMSG;
/*--------------------------------------------------------------------
- The following structure and macro are used to access the
- WM_MOUSEMOVE, and WM_BUTTON message parameters
--------------------------------------------------------------------*/
typedef struct _MOUSEMSG /* mousemsg */
{
USHORT codeHitTest; /* mp2 */
USHORT unused;
SHORT x; /* mp1 */
SHORT y;
} MSEMSG;
/*--------------------------------------------------------------------
- The following structure and macro are used to access the
- WM_CHAR message parameters.
--------------------------------------------------------------------*/
typedef struct _CHARMSG /* charmsg */
{
USHORT chr; /* mp2 */
USHORT vkey;
USHORT fs; /* mp1 */
UCHAR cRepeat;
UCHAR scancode;
} CHRMSG;
/*--------------------------------------------------------------------
- QMSG structure
--------------------------------------------------------------------*/
typedef struct _QMSG
{
HWND hwnd;
USHORT msg;
MPARAM mp1;
MPARAM mp2;
ULONG time;
POINTL ptl;
} QMSG;
/*--------------------------------------------------------------------
- structure for message queue
--------------------------------------------------------------------*/
typedef struct _MSGQUEUE_t
{
QMSG *MsgQ;
SHORT MaxEvents;
SHORT NEvents; /* number of events|msgs */
SHORT CEvent; /* next pos to place event */
} MSGQUEUE_t;
/*--------------------------------------------------------------------
- structure for message queues
--------------------------------------------------------------------*/
typedef struct _MSGQ_t
{
MSGQUEUE_t SysQ;
MSGQUEUE_t AppQ;
QMSG PaintMsg;
USHORT ShiftKeys;
} MSGQ_t;
/*--------------------------------------------------------------------
-
--------------------------------------------------------------------*/
typedef struct _CLASSDEF_t
{
struct _CLASSDEF_t *Next;
CLASS class;
CLASS base;
BYTE *CWindow;
BYTE *CSelected;
BYTE *CFrame;
ULONG Style;
HAB hab;
PSZ pszClassName;
MRESULT (EXPENTRY *PFNWP)(HWND, USHORT, MPARAM, MPARAM);
USHORT cbWindowData;
} CLASSDEF_t;
/*--------------------------------------------------------------------
-
--------------------------------------------------------------------*/
typedef struct _WINDOW_t
{
struct _WINDOW_t *Next;
PCHAR WinClass;
PCHAR WinName;
struct _WINDOW_t *WinOwner;
struct _WINDOW_t *WinParent;
struct _WINDOW_t *WinFirstChild;
struct _WINDOW_t *WinLastChild;
struct _WINDOW_t *WinPrevSibling;
struct _WINDOW_t *WinNextSibling;
SHORT Winx; // horizontal position of window
SHORT Winy; // vertical position of window
SHORT Wincx; // width of window
SHORT Wincy; // height of window
ULONG WinStyle;
USHORT WinIdent;
SHORT WinDataAmt;
PVOID WinData;
} WINDOW_t;
/*--------------------------------------------------------------------
-
--------------------------------------------------------------------*/
typedef CMDMSG FAR * PCMDMSG;
typedef POINTL FAR * PPOINTL;
typedef MSEMSG FAR * PMSEMSG;
typedef CHRMSG FAR * PCHRMSG;
typedef QMSG FAR * PQMSG;
typedef MSGQUEUE_t FAR * PMSGQUEUE_t;
typedef MSGQ_t FAR * PMSGQ_t;
typedef CLASSDEF_t FAR * PCLASSDEF_t;
typedef WINDOW_t FAR * PWINDOW_t;
/*--------------------------------------------------------------------
- one handle anchor block is created for each thread
--------------------------------------------------------------------*/
typedef struct _GLOBAL_HAB_t
{
struct _GLOBAL_HAB_t *Next;
struct _GLOBAL_HAB_t *Prev;
PCHAR PgmName; /* program name */
PMSGQ_t MsgQ; /* message queues */
PWINDOW_t WinFocus; /* window that has the focus */
PWINDOW_t DeskTop;
PWINDOW_t DeskTopObj;
PCLASSDEF_t ClassDef;
} GLOBAL_HAB_t;
typedef GLOBAL_HAB_t FAR * PGLOBAL_HAB_t;
/*--------------------------------------------------------------------
- global variables for fpwin.
--------------------------------------------------------------------*/
extern PGLOBAL_HAB_t ghabHead;
extern PGLOBAL_HAB_t ghab;
extern PGLOBAL_HAB_t ghabTail;
extern SHORT gSysVal[];
/*--------------------------------------------------------------------
-
- MODULE: queues.c
-
--------------------------------------------------------------------*/
HAB APIENTRY WinInitialize( USHORT fsOptions );
BOOL APIENTRY WinTerminate( HAB hab );
BOOL APIENTRY WinPeekMsg( HAB syshab,
PQMSG pqmsg,
HWND hwndFilter,
USHORT msgFilterFirst,
USHORT msgFilterLast,
USHORT fs );
BOOL APIENTRY WinGetMsg( HAB hab,
PQMSG qmsg,
HWND hwndFilter,
USHORT msgFilterFirst,
USHORT msgFilterLast );
HMQ APIENTRY WinCreateMsgQueue( HAB hab, SHORT cmsg );
BOOL APIENTRY WinDestroyMsgQueue( HMQ hmq );
BOOL APIENTRY WinPostMsg( HWND hwnd, USHORT msg, MPARAM mp1, MPARAM mp2 );
/*--------------------------------------------------------------------
-
- MODULE: dynarray.c
-
--------------------------------------------------------------------*/
SHORT ExpandArray( PVOID *Array, SHORT ElmtSize,
SHORT NElmts, PSHORT LastElmt );
VOID ShrinkArray( PVOID *Array, SHORT ElmtSize,
SHORT NElmts, PSHORT LastElmt );
VOID Release( PVOID *Node );
/*--------------------------------------------------------------------
-
- MODULE: window.c
-
--------------------------------------------------------------------*/
typedef MRESULT (EXPENTRY *PFNWP)(HWND, USHORT, MPARAM, MPARAM);
#endif